#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>

#include "messageshowarea.h"
#include "messageeditarea.h"

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    // 单例对象
    static MainWidget* istance;

    //构造函数、拷贝构造与赋值重载全部禁用掉
    MainWidget(QWidget *parent = nullptr);
    MainWidget(const MainWidget&) = delete;
    MainWidget& operator=(const MainWidget&) = delete;

public:
    // 获取单例对象
    static MainWidget* GetInstance();
    // 析构函数
    ~MainWidget();

private:
    // 整体窗口--------------------------------------
    QWidget* left_window;               // 窗口左侧的区域
    QWidget* mid_window;                // 窗口中间的区域
    QWidget* right_window;              // 窗口右侧的区域

    // 左侧局部窗口元素-------------------------------
    QPushButton* userAvator;            // 用户头像 -- 用按钮是因为后续实现点击按钮来实现用户的信息
    QPushButton* sessionTabButton;      // 会话标签页按钮
    QPushButton* friendTabButton;       // 好友标签页按钮
    QPushButton* applyTabButton;        // 好友申请标签页按钮

    // 中间局部窗口元素-------------------------------
    QLineEdit* searchEdit;              // 用户搜索框
    QPushButton* addFriendButton;       // 添加好友按钮

    // 右侧局部窗口元素-------------------------------
    MessageShowArea* messageShowArea;   //消息展示区
    MessageEditArea* messageEditArea;   //消息编辑区

    // 标签页
    enum ActiveTab
    {
        SESSION_TABLE,
        FRIEND_TABLE,
        APPLY_TABLE
    };
    // 当前所处的标签页--默认是会话标签页
    ActiveTab activeTab = SESSION_TABLE;

    // 初始化整个主窗口的样式布局
    void InitMainWindow();
    // 初始化左侧局部窗口
    void InitLeftWindow();
    // 初始化中间局部窗口
    void InitMidWindow();
    // 初始化右侧局部窗口
    void InitRightWindow();
    // 初始化信号槽
    void InitSignalSlot();

    // 加载会话列表信息
    void LoadSessionList();

private slots:
    void switchTableToSession();
    void switchTableToFriend();
    void switchTableToApply();
};
#endif // MAINWIDGET_H
